/**
 * 自增序列生成器
 * @example
 * const seq = new Sequence(0, 2);
 * seq.next(); // 返回 2
 * seq.next(); // 返回 4
 */
class Sequence {
    /**
     * 创建序列实例
     * @param {number} initialValue 初始值，默认为 0
     * @param {number} step 步进值，默认为 1
     */
    constructor(initialValue = 0, step = 1) {
        this.value = initialValue;
        this.step = step;
    }

    /**
     * 获取当前序列值而不推进序列
     * @returns {number} 当前序列值
     */
    current() {
        return this.value;
    }

    /**
     * 获取下一个序列值并推进序列
     * @returns {number} 下一个序列值
     */
    next() {
        const nextValue = this.value + this.step;
        this.value = nextValue;
        return nextValue;
    }

    /**
     * 重置序列到初始状态
     * @param {number} [newInitialValue] 可选的新初始值
     */
    reset(newInitialValue) {
        this.value = newInitialValue !== undefined
            ? newInitialValue
            : this.value - Math.floor(this.value / this.step) * this.step;
    }
}

export default Sequence;